home *** CD-ROM | disk | FTP | other *** search
- #include <stdarg.h>
- #include <ctype.h>
- #include <ext.h>
- #include <stdio.h>
-
- #include "p2c.h"
- #include "glo.h"
-
- /********************************************************************/
- #if TRUE!=1
- #undef TRUE
- #define TRUE 1
- #endif
-
- #if FALSE!=0
- #undef FALSE
- #define FALSE 0
- #endif
-
- #define POSITION_CURSOR 2
- #define SET_FOREGROUND_COLOR 3
- #define SET_BACKGROUND_COLOR 4
-
- /********************************************************************/
- LOCAL VOID OutChar( WORD ch );
-
- /********************************************************************/
- LOCAL BYTE buf[512];
- GLOBAL WORD cx, cy, cm, esc, chc;
- GLOBAL WORD ocx, ocy,discard;
- GLOBAL int interactive;
- extern char rev_mode;
- extern void cls(void),clline(int line);
- extern void cllines(int von,int bis),delxy(int line,int von,int bis);
- extern void ScrollUpR(int line),ScrollDownR(int line);
- /********************************************************************/
-
- GLOBAL BYTE *FGets(FILE *fp, BYTE *string)
- {
- WORD off=0, key;
- char *s;
- *string=0;
- if(fp==stdin)
- {
- interactive=1;
- woff=roff; /* Tastaturpuffer leeren */
- while(1)
- {
- while(roff==woff)
- {
- WaitBASIC();
- if(ctrl) return 0; /* CTRL-C */
- }
-
- key=KeyBuffer[roff++];
- if(roff>=KB_SIZE)
- roff=0;
-
- switch(key)
- {
- case 0:
- break;
- case 8:
- case 127:
- if(off>0)
- {
- OutChar(8);
- string[--off]=0;
- }
- break;
-
- case 13:
- OutChar(10);
- OutChar(13);
- interactive=0;
- return string;
-
- default:
- if(off<255)
- {
- string[off++]=key;
- string[off ]=0;
- }
- OutChar(key);
- break;
- }
- }
- }
- if((s=fgets(string,255,fp))!=NULL)
- {
- while(*s&&*s!='\r'&&*s!='\n') s++;
- *s=0;
- }
- else
- {
- fileerror=1;
- }
- return string;
- }
-
- GLOBAL BYTE *Gets( BYTE *string)
- {
- return FGets(stdin,string);
- }
-
- GLOBAL VOID Putchar( WORD ch )
- {
- void Bconout (int dev, int c);
- if( ch==10 )
- {
- OutChar( 10 );
- OutChar( 13 );
- }
- else if(ch=='\a')
- {
- Bconout(2,'\a');
- }
- else
- {
- OutChar( ch );
- }
- }
-
- GLOBAL WORD VFPRINTF(FILE *fp, BYTE *string, va_list arg )
- {
- vsprintf(buf, string, arg);
- FPUTS(buf,fp);
- return (int)strlen(buf);
- }
-
- GLOBAL WORD Printf( BYTE *string, ... )
- {
- int r;
- va_list arg;
- va_start(arg, string);
- r=VFPRINTF(stdout, string, arg);
- va_end(arg);
- return r;
- }
-
- GLOBAL WORD FPRINTF( FILE *f, char *string, ...)
- {
- int r;
- va_list arg;
-
- va_start(arg, string);
- r=VFPRINTF(f,string,arg);
- va_end(arg);
- return r;
- }
-
- GLOBAL WORD PUTC(WORD ch, FILE *f)
- {
- int r;
- if(f==stdout)
- {
- Putchar(ch);
- return ch;
- }
- else
- {
- r=putc(ch,f);
- if(r<0) fileerror=1;
- return r;
- }
- }
-
- GLOBAL WORD FPUTS(char *string, FILE *f)
- {
- while(*string) PUTC(*string=stdout)
- {
- rn ch;
- }
- ra {
- vfvir=ft\stringaPUTC(WORD ch, FILxr;
- }
-
- GLr(ch);
- m)=fg
- ursor muβ gelöscht werd{
- r;
- {
- yBuffDraw ursor(
- GLOB******);
- D o1;
- woff
- D o!= FAL==woff)
- case 0D o1;
- break;
- ca#define SET_FOR {
- , ose
- {
- /* CTRhc( 1[off++]=key;
- cx=ch-320;
- CTRx
- cx=00;
- CTRx>=MAX_CX)
- cx=MAX_CX-1(key);
- brch );
- {
- /* CTRhc( 2[off++]]=key;
- cy=ch-320;
- * CTRy
- cy=00;
- * CTRy>=MAX_CY)
- cy=MAX_CX-1(key);
- brcsc=efine(key);
- bcase 13:
- Oak;
- ca3
- #define SET_BACKG:ak;
- ca3
- #
- /**************:(off<255)
- {
- csc=efine(key);
-
- if((s=fgets(strinrch );
- {=key;
- csc=efine(key); case 0ch;;
- break;
- ca'A':g
- ursor upy);
- beyBuffe* CTRy> cy--;ase 13:
- Oak;
- ca'B':g
- ursor d***y);
- beyBuffe* CTRy<(MAX_CYr=f[off++]]cyse
- {
- /*:
- Oak;
- ca'C':g
- ursor forwera);
- beyBuffe* CTRx<(MAX_CXr=f[off++]]cxse
- {
- /*:
- Oak;
- ca'D':g
- ursor backwera);
- beyBuffe* CTRxhar(8);
- ]cx--;ase 13:
- Oak;
- ca'E':g
- le screen);
- beyBuffe*cx=cy=00;
- line);ase 13:
- Oak;
- ca'H':g
- Home cursor );
- beyBuffe*cx=cy=00;
- :
- Oak;
- ca'I':g
- Rever BcALSx);
- beyBuffe* CTRy> off++]]cy--;ase 13ch );
- {
- /*;
- /******e);ase 13:
- Oak;
- ca'J':g
- Er cato r;s;
- page
- beyBuffe*cs),delxcys1,MAX_CYr=fe 127:
- 'K':g
- le to r;s;
- ),de
- beyBuffe*n,int int
- GMAX_CXr=f; 8:
- case 127:
- 'L':g
- Insert L,de
- b;
- beyBuffe*;
- /********c
- }
- }cx=00;
- case 127:
- 'M':g
- Delete L,de
- b;
- beyBuffe*;
- /**ownRc
- }
- }cx=00;
- case 1 127:
- 'Y':g
- Position cursor );
- eyBuffe*csc=#define SET_FOR; {
- , o=00;
- case 1 127:
- 'b':g
- Set foregroFAL color )eyBuffe*csc=3
- #define SET_BACKG; {
- , o=00;
- case 1 127:
- 'c':g
- Set backgroFAL color )eyBuffe*csc=3
- #
- /**************; {
- , o=00;
- case 1 127:
- 'd':g
- Er cabeginnfvis;
- inplaybeyBuffe*cs),delx0,cy-=fe 127:
- 'o':g
- Er cabeginnfvis;
- ),de
- beyBuffe*n,int int0,cxr=f; 8:
- case 1 127:
- 'e':g
- Enable cursor );
- eyBuffe*cm=efine(key);
-
- if((s 127:
- 'f':g
- Disable cursor );
- eyBuffe*cm= FAL(key);
-
- if((s 127:
- 'j':g
- Save cursor position;
- eyBuffe*ocx=cx;Buffe*ocy=cy(key);
-
- if((s 127:
- 'k':g
- Restore cursor position;
- eyBuffe*cx=ocx;Buffe*cy=ocy(key);
-
- if((s 127:
- 'l':g
- Er caentire ),de
- b
- eyBuffe*cx=00;
- lirn vocyf; 8:
- case 1 127:
- 'p':g
- Enrofid cer Bvideo s(vo
- eyBuffe*d cls(vo=-1(key);
- case 127:
- 'q':g
- Exitid cer Bvideo s(vo
-
- eyBuffe*d cls(vo=00;
- case 127:
- 'v':g
- Wrap at r;s;
- ),de
- bbeyBuffe*nintera=00;
- case 127:
- 'w':g
- Distera at r;s;
- ),de
- beyBuffe*nintera=1; 8:
- case 1 127:255)
- {
-
- if((s=fgets(string,25
- BconintnBAL0ch;1;
- wof case 0ch;;
- b wof
- {
-
- else
- {ch;
- case 127
- if(of>0)
- {
- CTRxhar(8);
- {Buffe*cx--;ase 13P
-
- GLOB
- Gint' ')((s=fgets(s case 1 127
- 9:ak;
- x+=8e 127:
- x/=8e 127:
- x*=8e 127: CTRx>=MAX_CX)Buffe*cx=MAX_CX-1(key); case 1 127
- 10 {
- CT(++cyf>=MAX_CY)(8);
- {Buffe*cy=MAX_CY-1(key);
- ;
- /**ow()((s=fgets(s case 1 127
- 12:ak;
- ine);ase 1cx=cy=00;
- case 1 127
- 13:ak;
- x=00;
- case 1 127
- {
- csc= FAL(key); case 127}tChar( ch );
- }
- }P
-
- GLOB
- chint
- hORD VFPR**);
- Rx>=MAX_CX)Buf wof
- x=MAX_CY-1(key);
- nintera==woff)
- x=00;
- cyse
- {
- tring,255,fRy>=MAX_CY)Buf wof
- y=MAX_CY-1(key);
- /**ow()((s=}ch);
- m)=fg
- ursor neu Zeichn{
- r;
- {
-
- yBuffDraw ursor(
- GLOB****FPR**, intfourfoldf( chx0id Scy0id Scxid ScyGLr(ch)plotpod S(x0+x,y0+yf; 8:plotpod S(x0-y,y0+xf; 8:plotpod S(x0-x,y0-yf; 8:plotpod S(x0+y,y0-x****FPR**, inteightfoldf( chx0id Scy0id Scxid ScyGLr(ch)fourfoldfx0iy0ix,yf; 8:fourfoldfx0iy0ix,-B****FPR**, intcirclef( chx0id Scy0id Scr(f==stdout)x,y,q; 8:x=00;
- y=q=L WO doBuf wofeightfoldfx0iy0ix,yf; 8: q-=x+x+1(key)xse
- {
- ;
- q<0==woff)
- y--;ase 1q+=y+y
- {
- trin